import { defineStore } from 'pinia'
import { ref } from 'vue';
import { getUuid, isUnde } from '@/utils';


/** 测试模版 */
export type TestTemplate = {
	/** 模板类型 */
	type?: string;
	/** 模板描述 */
	desc?: string;
	/** 权重 */
	weight?: number;
	/** 其他自定义属性 */
	[key: string]: any
}

/** 测试模板数据 */
export interface IUseTemplate {
	template?: TestTemplate;
	TotalCount?: number;
	ErrorCount?: number;
}

/** 句子信息 */
export interface ISentence {
	/** sentence id */
	ID?: number;
	/** 英文句子 */
	SentenceEn?: string;
	/** 中文句子 */
	SentenceCn?: string;
	/** 绑定词组Id */
	WordIds?: IWordIndexExt[];
	/** 视频 */
	Media?: string;
	/** 音频 */
	Audio?: string;
	/** ai对话内容 */
	AIContent?: string;
}

/** 单词在句子种的索引关系 */
export interface IWordIndexExt {
	/** 单词ID */
	ID?: number;
	/** 单词书中的词汇 */
	Word?: string;
	/** 词义 */
	Mean?: string;
	/** 索引关系 */
	Index?: number[];
	/** 是否是扩展词 */
	IsExt?: boolean;
}

/** 单词信息 */
export interface IWord {
	/** 标识字段 */
	Key?: string,
	/** Process ID */
	ID?: number;
	/** 单词ID */
	WordId?: number;
	/** 基础库单词ID */
	BaseWordID?: number;
	/** 单词 */
	Word?: string;
	/** 词义 */
	Mean?: string;
	/** 音频 */
	MP3?: string;
	/** 音标 */
	PS?: string;
	/** 音节 */
	Syllable?: string;
	/** 记忆方法 */
	Methods?: any | { Method?: string; Detail?: string }[]
	/** 是否书写 */
	NeedWrite?: boolean;
	/** 句子ID */
	SentenceId?: number;
	/** 句子快照 */
	SentenceSnapshot?: { SentenceEn?: string; SentenceCn?: string; Audio?: string; Media?: string; WordIds?: IWordIndexExt[] }
	/** 使用模版 */
	UseTemplates?: IUseTemplate[];
	/** 使用组合模版 */
	UseCombTemplates?: IUseTemplate[];
	/** 需要学习 */
	NeedRemeber?: boolean;
	/** 单词掌握度：0-9 */
	LostLv?: number;
	/** 课程UUID */
	LessonUUID?: string;
	/** 在句子中的索引位置 */
	Index?: number[];
	/** 命中样式 */
	ChoiceStyle?: any;
	/** 混淆列表 */
	testShuffle?: IWord[]
	/** 惩罚机制 */
	// CF?: number;
	// HYY?: number;
	// HHY?: number;
	// TX?: number;
}

/** 做题模式：选择题 */
export interface IUseSelectedTemplate extends TestTemplate {
	/** 排序 */
	order?: number;
	/** 题型 */
	type: string;
	/** 描述 */
	desc?: string;
	/** 校验字段 */
	title?: string;
	/** 显示字段 */
	show?: string;
}

/** 做题模式组合 */
export interface IUseTemplates {
	/** 英译汉 */
	YYH: IUseSelectedTemplate;
	/** 汉译英 */
	HYY: IUseSelectedTemplate;
	/** 听选 */
	TX: IUseSelectedTemplate;
	/** 音节拼写 */
	SPELL_SYLLABLE: TestTemplate;
	/** 单词拼写 */
	SPELL: TestTemplate;
	/** 挖空拼写 */
	SPELL_SIMPLE: TestTemplate;
	/** 句词测试 */
	SENTENCE_TEST: TestTemplate;
}

/** 课程测试工具 */
export type ClassTester = {
	/** 开启测试工具 */
	isTestMode: boolean;
	/** 开启上节课词汇回顾 */
	prevClassBack: boolean;
	/** 开启词汇学习步骤 */
	studyWord: boolean;
	/** 开启筛词步骤的测试 */
	filterWordTest: boolean;
	/** 开启测试英译汉 */
	testYYH: boolean;
	/** 开启测试汉译英 */
	testHYY: boolean;
	/** 开启听选 */
	testTX: boolean;
	/** 开启单词拼写 */
	testSPELL: boolean;
	/** 开启挖空拼写 */
	testSPELL_SIMPLE: boolean;
	/** 开启音节拼写 */
	testSPELL_SYLLABLE: boolean;
	/** 开启挖空填词 */
	testSENTENCE_TEST: boolean;
}

/** 测试模版 */
export const TestTemplates: IUseTemplates = {
	YYH: { type: "YYH", desc: "英译汉", title: "Word", show: "Mean", weight: 1 },
	HYY: { type: "HYY", desc: "汉译英", title: "Mean", show: "Word", weight: 1 },
	TX: { type: "TX", desc: "听选", title: "Word", show: "Mean", weight: 1 },
	SPELL_SYLLABLE: { type: 'SPELL_SYLLABLE', desc: "音节拼写", weight: 1 },
	SPELL: { type: 'SPELL', desc: "单词拼写", weight: 2 },
	SPELL_SIMPLE: { type: 'SPELL_SIMPLE', desc: "挖空拼写", weight: 2 },
	SENTENCE_TEST: { type: 'SENTENCE_TEST', desc: "句词测试", weight: 1 }
}

// 组合式 store
export const useStudyStore = defineStore('study', () => {
	
	/** 筛词阶段 */
	const choiceActionStep = {
		/** 筛词阶段 */
		CHOICE: 'CHOICE',
		/** 筛词完毕，二次验证 */
		CHOICE_COMPLETE: 'CHOICE_COMPLETE',
		/** 二次验证完毕 */
		TEST_COMPLETE: 'TEST_COMPLETE'
	}
	
	const Title = ref('');
	// 课程ID
	const LessonUUID = ref<string>('');
	// 是否是未完成类的学习
	const IsLastClass = ref<boolean>(false);
	/** 任务进度 */
	const step = ref<number>(-1);
	/** 学习的句子 */
	const sentence = ref<ISentence>({});
	/** 学习/复习的词汇组 */
	const wordGroup = ref<IWord[]>([]);
	/** 备用混淆词汇 */
	const shuffleWords = ref<IWord[]>([]);
	/** 本节课学习词汇量 */
	const RemeberCnt = ref<number>(0);
	/** 是否开启timer计时器 */
	const timerEnable = ref<boolean>(false);
	/** 测试工具 */
	const tester = ref<ClassTester>({
		isTestMode: false,
		prevClassBack: true,
		studyWord: true,
		filterWordTest: true,
		testHYY: true,
		testYYH: true,
		testTX: true,
		testSPELL: true,
		testSPELL_SIMPLE: true,
		testSPELL_SYLLABLE: true,
		testSENTENCE_TEST: true
	})
	
	/** 设置课程UUID */
	const setLessonUUID = (inLessonUUID: string) => LessonUUID.value = inLessonUUID;
	/** 设置任务进度 */
	const setStep = (inStep: number, title?: string) => {
		step.value = inStep;
		setTitle(title);
	};
	/** 设置学习的句子 */
	const setSentence = (inSentence: ISentence) => sentence.value = inSentence;
	/** 设置备用混淆词汇 */
	const setShuffleWords = (inShuffleWords: IWord[]) => shuffleWords.value = inShuffleWords;
	/** 设置未完成状态 */
	const setIsLastClass = (inIsLastClass: boolean) => IsLastClass.value = inIsLastClass;
	/** 设置标题 */
	const setTitle = (title?: string) => {
		if(!isUnde(title)) {
			Title.value = title
		}
	};
	/** 设置本节课学习词汇量 */
	const setRemeberCnt = (inRemeberCnt: number) => RemeberCnt.value = inRemeberCnt;
	/** 设置学习/复习的词汇组 */
	const setWordGroup = (inWordGroup: IWord[]) => {
		wordGroup.value = inWordGroup.map(item => {
			if(!item.Key){
				item.Key = getUuid()
			}
			return item;
		});
	}
	/** 设置是否开启timer计时器 */
	const setTimerEnable = (inTimerEnable: boolean) => timerEnable.value = inTimerEnable;
	
	/** 初始化全局缓存 */
	const init = () => {
		step.value = -1;
		sentence.value = {};
		wordGroup.value = [];
	}
	
	
	return {
		Title,
		setTitle,
		LessonUUID,
		setIsLastClass,
		IsLastClass,
		shuffleWords,
		setLessonUUID,
		RemeberCnt,
		step,
		choiceActionStep,
		sentence,
		wordGroup,
		tester,
		setSentence,
		setWordGroup,
		setShuffleWords,
		setStep,
		setRemeberCnt,
		setTimerEnable,
		init
	}
})
